A software application that converts a program that contains instructions into a form that can be understood by the central processing unit. If you want to create software you write the program by typing in instructions or designing a flow-chart. This is then passed to the compiler program that produces the finised application.